package model.common.dependence;

import model.common.root.Element;
import model.common.template.TemplateParameter;

/** An Abstraction is a Dependency that relates two NamedElements or sets of NamedElements that represent the same concept at
different levels of abstraction or from different viewpoints. The relationship may be defined as a mapping between the suppliers
and the clients . Depending on the specific stereotype of Abstraction, the mapping may be formal or informal, and it may be
unidirectional or bidirectional. Abstraction has predefined stereotypes (such as «Derive», «Refine», and «Trace») that are defined
in the Standard Profile (see Clause 22). If an Abstraction has more than one client, the supplier maps into the set of clients as a
group. For example, an analysis-level Class might be split into several design-level Classes. The situation is similar if there is
more than one supplier. */
public class Abstraction extends Dependency {

	// Attributes
	private OpaqueExpression mapping = null;

	// Constructor
	/**
	 * @param source
	 * @param target
	 */
	public Abstraction(Element source, Element target) {
		super(source, target);
	}
	
	/**
	 * @param source
	 * @param target
	 * @param parameteredElement
	 */
	public Abstraction(Element source, Element target, TemplateParameter parameteredElement) {
		super(source, target, parameteredElement);
	}

}
